home *** CD-ROM | disk | FTP | other *** search
- /*
- * name: pass
- *
- * description: create a rectangle/bitmap pair list.
- *
- * synopsis: pass (lp, r, sb, op, l, p2, p3, p4)
- * struct layer *lp;
- * struct rectangle *r;
- * struct bitmap *sb;
- * struct obscured *op;
- * struct listelement **l;
- * int *p2;
- * int *p3;
- * int *p4;
- *
- * globals: none.
- *
- * calls: lessthan (lessthan.c)
- * malloc (libc)
- *
- * called by: lbitblt (lbitblt.c)
- */
- #include "layers.h"
-
- pass (lp, r, sb, op, l, p2, p3, p4)
- struct layer *lp;
- struct rectangle *r;
- struct bitmap *sb;
- struct obscured *op;
- struct listelement **l;
- int *p2; /* unused */
- int *p3; /* unused */
- int *p4; /* unused */
- {
- struct listelement *e;
- struct listelement *pe;
- struct listelement *newe;
-
- char *malloc ();
-
- pe = null;
- for (e = *l; e != null; e = e -> lst_next) {/* e = each element of l */
- if (!lessthan (r, &(e -> lst_rect))) {
- /*
- * insert {sb,r} into l before e;
- */
- newe = (struct listelement *)
- malloc ((unsigned) sizeof (struct listelement));
- newe -> lst_bp = sb;
- newe -> lst_rect.origin.x = r -> origin.x;
- newe -> lst_rect.origin.y = r -> origin.y;
- newe -> lst_rect.corner.x = r -> corner.x;
- newe -> lst_rect.corner.y = r -> corner.y;
- newe -> lst_next = e;
- if (pe != null)
- pe -> lst_next = newe;
- else
- *l = newe;
- return;
- }
- pe = e;
- }
- /*
- * append {sb,r} to l;
- */
- newe = (struct listelement *)
- malloc ((unsigned) sizeof (struct listelement));
- newe -> lst_bp = sb;
- newe -> lst_rect.origin.x = r -> origin.x;
- newe -> lst_rect.origin.y = r -> origin.y;
- newe -> lst_rect.corner.x = r -> corner.x;
- newe -> lst_rect.corner.y = r -> corner.y;
- newe -> lst_next = null;
- if (pe != null)
- pe -> lst_next = newe;
- else
- *l = newe;
- }